﻿/*********************************************************************************
 *Author:         OnClick
 *Version:        1.0
 *UnityVersion:   2018.3.11f1
 *Date:           2019-04-13
 *Description:    IFramework
 *History:        2018.11--
*********************************************************************************/
using System;
using UnityEngine;
using UnityEditor;
using UnityEngine.Internal;
namespace IFramework
{
    public partial class IEditorWindow : EditorWindow
    {
        //gui
        public static void Button(Action<bool> listener, Rect position, GUIContent content, GUIStyle style)
        {
            if (listener != null)
            {
                listener(GUI.Button(position, content, style));
            }
            else
            {
                GUI.Button(position, content, style);
            }
        }
        public static void Button(Action<bool> listener, Rect position, Texture image)
        {
            if (listener != null)
            {
                listener(GUI.Button(position, image));
            }
            else
            {
                GUI.Button(position, image);
            }
        }
        public static void Button(Action<bool> listener, Rect position, Texture image, GUIStyle style)
        {
            if (listener != null)
            {
                listener(GUI.Button(position, image, style));
            }
            else
            {
                GUI.Button(position, image, style);
            }
        }
        public static void Button(Action<bool> listener, Rect position, string text, GUIStyle style)
        {
            if (listener != null)
            {
                listener(GUI.Button(position, text, style));
            }
            else
            {
                GUI.Button(position, text, style);
            }
        }
        public static void Button(Action<bool> listener, Rect position, GUIContent content)
        {
            if (listener != null)
            {
                listener(GUI.Button(position, content));
            }
            else
            {
                GUI.Button(position, content);
            }
        }
        public static void Button(Action<bool> listener, Rect position, string text)
        {
            if (listener != null)
            {
                listener(GUI.Button(position, text));
            }
            else
            {
                GUI.Button(position, text);
            }
        }
        protected void DrawBackGround(Rect rect)
        {
            DrawBackGround(rect, "");
        }
        protected void DrawBackGround(Rect rect, string text)
        {
            GUI.Box(rect, text);
        }
        protected void DrawBackGround(Rect rect, Texture image)
        {
            GUI.Box(rect, image);
        }
        protected void DrawBackGround(Rect rect, GUIContent content)
        {
            GUI.Box(rect, content);
        }
        protected void DrawBackGround(Rect rect, string text, GUIStyle style)
        {
            GUI.Box(rect, text, style);
        }
        protected void DrawBackGround(Rect rect, Texture image, GUIStyle style)
        {
            GUI.Box(rect, image, style);
        }
        protected void DrawBackGround(Rect rect, GUIContent content, GUIStyle style)
        {
            GUI.Box(rect, content, style);
        }
        //GUILayOut
        protected GUILayoutOption Width(float width)
        {
            return GUILayout.Width(width);
        }
        protected GUILayoutOption Height(float height)
        {
            return GUILayout.Height(height);
        }
        protected GUILayoutOption MaxHeight(float maxHeight)
        {
            return GUILayout.MaxHeight(maxHeight);
        }
        protected GUILayoutOption MaxWidth(float maxWidth)
        {
            return GUILayout.MaxWidth(maxWidth);
        }
        protected GUILayoutOption MinHeight(float minHeight)
        {
            return GUILayout.MinHeight(minHeight);
        }
        protected GUILayoutOption MinWidth(float minWidth)
        {
            return GUILayout.MinWidth(minWidth);
        }
        protected GUILayoutOption ExpandHeight(bool expand)
        {
            return GUILayout.ExpandHeight(expand);
        }
        protected GUILayoutOption ExpandWidth(bool expand)
        {
            return GUILayout.ExpandWidth(expand);
        }
        protected void FlexibleSpace()
        {
            GUILayout.FlexibleSpace();
        }
        protected void Space(float pixels)
        {
            GUILayout.Space(pixels);
        }


        protected void DrawArea(Action draw, Rect rect)
        {
            GUILayout.BeginArea(rect);
            if (draw != null) draw();
            GUILayout.EndArea();
        }
        protected void DrawArea(Action draw, Rect rect, string text)
        {
            GUILayout.BeginArea(rect, text);
            if (draw != null) draw();
            GUILayout.EndArea();
        }
        protected void DrawArea(Action draw, Rect rect, Texture image)
        {
            GUILayout.BeginArea(rect, image);
            if (draw != null) draw();
            GUILayout.EndArea();
        }
        protected void DrawArea(Action draw, Rect rect, GUIContent content)
        {
            GUILayout.BeginArea(rect, content);
            if (draw != null) draw();
            GUILayout.EndArea();
        }
        protected void DrawArea(Action draw, Rect rect, GUIStyle style)
        {
            GUILayout.BeginArea(rect, style);
            if (draw != null) draw();
            GUILayout.EndArea();
        }
        protected void DrawArea(Action draw, Rect rect, string text, GUIStyle style)
        {
            GUILayout.BeginArea(rect, text, style);
            if (draw != null) draw();
            GUILayout.EndArea();
        }
        protected void DrawArea(Action draw, Rect rect, Texture image, GUIStyle style)
        {
            GUILayout.BeginArea(rect, image, style);
            if (draw != null) draw();
            GUILayout.EndArea();
        }
        protected void DrawArea(Action draw, Rect rect, GUIContent content, GUIStyle style)
        {
            GUILayout.BeginArea(rect, content, style);
            if (draw != null) draw();
            GUILayout.EndArea();
        }


        protected Vector2 DrawScrollView(Action draw, Vector2 scrollPos, GUIStyle horizontalScrollbar, GUIStyle verticalScrollbar, params GUILayoutOption[] options)
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos, horizontalScrollbar, verticalScrollbar, options);
            if (draw != null) draw();
            GUILayout.EndScrollView();
            return scrollPos;
        }
        protected Vector2 DrawScrollView(Action draw, Vector2 scrollPos, bool alwaysShowHorizontal, bool alwaysShowVertical, GUIStyle horizontalScrollbar, GUIStyle verticalScrollbar, params GUILayoutOption[] options)
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos, alwaysShowHorizontal, alwaysShowVertical, horizontalScrollbar, verticalScrollbar, options);
            if (draw != null) draw();
            GUILayout.EndScrollView();
            return scrollPos;
        }
        protected Vector2 DrawScrollView(Action draw, Vector2 scrollPos, GUIStyle style, params GUILayoutOption[] options)
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos, style, options);
            if (draw != null) draw();
            GUILayout.EndScrollView();
            return scrollPos;
        }
        protected Vector2 DrawScrollView(Action draw, Vector2 scrollPos, GUIStyle style)
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos, style);
            if (draw != null) draw();
            GUILayout.EndScrollView();
            return scrollPos;
        }
        protected Vector2 DrawScrollView(Action draw, Vector2 scrollPos, bool alwaysShowHorizontal, bool alwaysShowVertical, GUIStyle horizontalScrollbar, GUIStyle verticalScrollbar, GUIStyle background, params GUILayoutOption[] options)
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos, alwaysShowHorizontal, alwaysShowVertical, horizontalScrollbar, verticalScrollbar, background, options);
            if (draw != null) draw();
            GUILayout.EndScrollView();
            return scrollPos;
        }
        protected Vector2 DrawScrollView(Action draw, Vector2 scrollPos, bool alwaysShowHorizontal, bool alwaysShowVertical, params GUILayoutOption[] options)
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos, alwaysShowHorizontal, alwaysShowVertical, options);
            if (draw != null) draw();
            GUILayout.EndScrollView();
            return scrollPos;

        }
        protected Vector2 DrawScrollView(Action draw, Vector2 scrollPos, params GUILayoutOption[] options)
        {
            scrollPos = GUILayout.BeginScrollView(scrollPos, options);
            if (draw != null) draw();
            GUILayout.EndScrollView();
            return scrollPos;
        }


        protected void DrawHorizontal(Action draw, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginHorizontal(text, style, options);
            if (draw != null) draw();
            GUILayout.EndHorizontal();
        }
        protected void DrawHorizontal(Action draw, Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginHorizontal(image, style, options);
            if (draw != null) draw();
            GUILayout.EndHorizontal();
        }
        protected void DrawHorizontal(Action draw, GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginHorizontal(content, style, options);
            if (draw != null) draw();
            GUILayout.EndHorizontal();
        }
        protected void DrawHorizontal(Action draw, params GUILayoutOption[] options)
        {
            GUILayout.BeginHorizontal(options);
            if (draw != null) draw();
            GUILayout.EndHorizontal();
        }
        protected void DrawHorizontal(Action draw, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginHorizontal(style, options);
            if (draw != null) draw();
            GUILayout.EndHorizontal();
        }
        protected void DrawVertical(Action draw, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginVertical(text, style, options);
            if (draw != null) draw();
            GUILayout.EndVertical();
        }
        protected void DrawVertical(Action draw, Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginVertical(image, style, options);
            if (draw != null) draw();
            GUILayout.EndVertical();
        }
        protected void DrawVertical(Action draw, GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginVertical(content, style, options);
            if (draw != null) draw();
            GUILayout.EndVertical();
        }
        protected void DrawVertical(Action draw, params GUILayoutOption[] options)
        {
            GUILayout.BeginVertical(options);
            if (draw != null) draw();
            GUILayout.EndVertical();
        }
        protected void DrawVertical(Action draw, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.BeginVertical(style, options);
            if (draw != null) draw();
            GUILayout.EndVertical();
        }

        protected void DrawBox(Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.Box(image, style, options);
        }
        protected void DrawBox(GUIContent content, params GUILayoutOption[] options)
        {
            GUILayout.Box(content, options);
        }
        protected void DrawBox(string text, params GUILayoutOption[] options)
        {
            GUILayout.Box(text, options);
        }
        protected void DrawBox(Texture image, params GUILayoutOption[] options)
        {
            GUILayout.Box(image, options);
        }
        protected void DrawBox(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.Box(text, style, options);
        }
        protected void DrawBox(GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.Box(content, style, options);
        }

        protected void Button(Action<bool> listener, Texture image, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.Button(image, options));
            }
            else
            {
                GUILayout.Button(image, options);
            }
        }
        protected void Button(Action<bool> listener, string text, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.Button(text, options));
            }
            else
            {
                GUILayout.Button(text, options);
            }
        }
        protected void Button(Action<bool> listener, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.Button(text, style, options));
            }
            else
            {
                GUILayout.Button(text, style, options);
            }
        }
        protected void Button(Action<bool> listener, Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.Button(image, style, options));
            }
            else
            {
                GUILayout.Button(image, style, options);
            }
        }
        protected void Button(Action<bool> listener, GUIContent content, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.Button(content, options));
            }
            else
            {
                GUILayout.Button(content, options);
            }
        }
        protected void Button(Action<bool> listener, GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.Button(content, style, options));
            }
            else
            {
                GUILayout.Button(content, style, options);
            }
        }
        protected void RepeatButton(Action<bool> listener, string text, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.RepeatButton(text, options));
            }
            else
            {
                GUILayout.RepeatButton(text, options);
            }
        }
        protected void RepeatButton(Action<bool> listener, GUIContent content, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.RepeatButton(content, options));
            }
            else
            {
                GUILayout.RepeatButton(content, options);
            }
        }
        protected void RepeatButton(Action<bool> listener, Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.RepeatButton(image, style, options));
            }
            else
            {
                GUILayout.RepeatButton(image, style, options);
            }
        }
        protected void RepeatButton(Action<bool> listener, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.RepeatButton(text, style, options));
            }
            else
            {
                GUILayout.RepeatButton(text, style, options);
            }
        }
        protected void RepeatButton(Action<bool> listener, GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.RepeatButton(content, style, options));
            }
            else
            {
                GUILayout.RepeatButton(content, style, options);
            }
        }
        protected void RepeatButton(Action<bool> listener, Texture image, params GUILayoutOption[] options)
        {
            if (listener != null)
            {
                listener(GUILayout.RepeatButton(image, options));
            }
            else
            {
                GUILayout.RepeatButton(image, options);
            }
        }

        protected float HorizontalScrollbar(float value, float size, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            return GUILayout.HorizontalScrollbar(value, size, leftValue, rightValue, options);
        }
        protected float HorizontalScrollbar(float value, float size, float leftValue, float rightValue, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.HorizontalScrollbar(value, size, leftValue, rightValue, style, options);
        }
        protected float HorizontalSlider(float value, float leftValue, float rightValue, GUIStyle slider, GUIStyle thumb, params GUILayoutOption[] options)
        {
            return GUILayout.HorizontalSlider(value, leftValue, rightValue, slider, thumb, options);
        }
        protected float HorizontalSlider(float value, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            return GUILayout.HorizontalSlider(value, leftValue, rightValue, options);
        }
        protected float VerticalScrollbar(float value, float size, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            return GUILayout.VerticalScrollbar(value, size, leftValue, rightValue, options);
        }
        protected float VerticalScrollbar(float value, float size, float leftValue, float rightValue, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.VerticalScrollbar(value, size, leftValue, rightValue, style, options);
        }
        protected float VerticalSlider(float value, float leftValue, float rightValue, GUIStyle slider, GUIStyle thumb, params GUILayoutOption[] options)
        {
            return GUILayout.VerticalSlider(value, leftValue, rightValue, slider, thumb, options);
        }
        protected float VerticalSlider(float value, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            return GUILayout.VerticalSlider(value, leftValue, rightValue, options);
        }

        protected int SelectionGrid(int selected, GUIContent[] contents, int xCount, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.SelectionGrid(selected, contents, xCount, style, options);
        }
        protected int SelectionGrid(int selected, string[] texts, int xCount, params GUILayoutOption[] options)
        {
            return GUILayout.SelectionGrid(selected, texts, xCount, options);
        }
        protected int SelectionGrid(int selected, Texture[] images, int xCount, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.SelectionGrid(selected, images, xCount, style, options);
        }
        protected int SelectionGrid(int selected, string[] texts, int xCount, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.SelectionGrid(selected, texts, xCount, style, options);
        }
        protected int SelectionGrid(int selected, GUIContent[] content, int xCount, params GUILayoutOption[] options)
        {
            return GUILayout.SelectionGrid(selected, content, xCount, options);
        }
        protected int SelectionGrid(int selected, Texture[] images, int xCount, params GUILayoutOption[] options)
        {
            return GUILayout.SelectionGrid(selected, images, xCount, options);
        }

        protected void Label(GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.Label(content, style, options);
        }
        protected void Label(GUIContent content, params GUILayoutOption[] options)
        {
            GUILayout.Label(content, options);
        }
        protected void Label(Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.Label(image, style, options);
        }
        protected void Label(string text, params GUILayoutOption[] options)
        {
            GUILayout.Label(text, options);
        }
        protected void Label(Texture image, params GUILayoutOption[] options)
        {
            GUILayout.Label(image, options);
        }
        protected void Label(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            GUILayout.Label(text, style, options);
        }
        protected string TextField(string text, int maxLength, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.TextField(text, maxLength, style, options);
        }
        protected string TextField(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.TextField(text, style, options);
        }
        protected string TextField(string text, int maxLength, params GUILayoutOption[] options)
        {
            return GUILayout.TextField(text, maxLength, options);
        }
        protected string TextField(string text, params GUILayoutOption[] options)
        {
            return GUILayout.TextField(text, options);
        }
        protected string PasswordField(string password, char maskChar, params GUILayoutOption[] options)
        {
            return GUILayout.PasswordField(password, maskChar, options);
        }
        protected string PasswordField(string password, char maskChar, int maxLength, params GUILayoutOption[] options)
        {
            return GUILayout.PasswordField(password, maskChar, maxLength, options);
        }
        protected string PasswordField(string password, char maskChar, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.PasswordField(password, maskChar, style, options);
        }
        protected string PasswordField(string password, char maskChar, int maxLength, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.PasswordField(password, maskChar, maxLength, style, options);
        }
        protected string TextArea(string text, int maxLength, params GUILayoutOption[] options)
        {
            return GUILayout.TextArea(text, maxLength, options);
        }
        protected string TextArea(string text, int maxLength, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.TextArea(text, maxLength, style, options);
        }
        protected string TextArea(string text, params GUILayoutOption[] options)
        {
            return GUILayout.TextArea(text, options);
        }
        protected string TextArea(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.TextArea(text, style, options);
        }

        protected bool Toggle(bool value, Texture image, params GUILayoutOption[] options)
        {
            return GUILayout.Toggle(value, image, options);
        }
        protected bool Toggle(bool value, string text, params GUILayoutOption[] options)
        {
            return GUILayout.Toggle(value, text, options);
        }
        protected bool Toggle(bool value, GUIContent content, params GUILayoutOption[] options)
        {
            return GUILayout.Toggle(value, content, options);
        }
        protected bool Toggle(bool value, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Toggle(value, text, style, options);
        }
        protected bool Toggle(bool value, GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Toggle(value, content, style, options);
        }
        protected bool Toggle(bool value, Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Toggle(value, image, style, options);
        }

        protected int Toolbar(int selected, Texture[] images, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, images, options);
        }
        protected int Toolbar(int selected, GUIContent[] contents, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, contents, options);
        }
        protected int Toolbar(int selected, string[] texts, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, texts, style, options);
        }
        protected int Toolbar(int selected, string[] texts, GUIStyle style, GUI.ToolbarButtonSize buttonSize, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, texts, style, buttonSize, options);
        }
        protected int Toolbar(int selected, Texture[] images, GUIStyle style, GUI.ToolbarButtonSize buttonSize, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, images, style, buttonSize, options);
        }
        protected int Toolbar(int selected, GUIContent[] contents, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, contents, style, options);
        }
        protected int Toolbar(int selected, GUIContent[] contents, GUIStyle style, GUI.ToolbarButtonSize buttonSize, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, contents, style, buttonSize, options);
        }
        protected int Toolbar(int selected, string[] texts, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, texts, options);
        }
        protected int Toolbar(int selected, Texture[] images, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Toolbar(selected, images, style, options);
        }

        protected Rect Window(int id, Rect screenRect, GUI.WindowFunction func, Texture image, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Window(id, screenRect, func, image, style, options);
        }
        protected Rect Window(int id, Rect screenRect, GUI.WindowFunction func, GUIContent content, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Window(id, screenRect, func, content, style, options);
        }
        protected Rect Window(int id, Rect screenRect, GUI.WindowFunction func, GUIContent content, params GUILayoutOption[] options)
        {
            return GUILayout.Window(id, screenRect, func, content, options);
        }
        protected Rect Window(int id, Rect screenRect, GUI.WindowFunction func, Texture image, params GUILayoutOption[] options)
        {
            return GUILayout.Window(id, screenRect, func, image, options);
        }
        protected Rect Window(int id, Rect screenRect, GUI.WindowFunction func, string text, params GUILayoutOption[] options)
        {
            return GUILayout.Window(id, screenRect, func, text, options);
        }
        protected Rect Window(int id, Rect screenRect, GUI.WindowFunction func, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return GUILayout.Window(id, screenRect, func, text, style, options);
        }


        //Editor
        protected void Space()
        {
            EditorGUILayout.Space();
        }
        protected void Separator()
        {
            EditorGUILayout.Separator();
        }

        protected Vector2 Vector2Field(string label, Vector2 value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector2Field(label, value, options);
        }
        protected Vector2 Vector2Field(GUIContent label, Vector2 value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector2Field(label, value, options);
        }
        protected Vector2Int Vector2IntField(GUIContent label, Vector2Int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector2IntField(label, value, options);
        }
        protected Vector2Int Vector2IntField(string label, Vector2Int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector2IntField(label, value, options);
        }
        protected Vector3 Vector3Field(GUIContent label, Vector3 value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector3Field(label, value, options);
        }
        protected Vector3 Vector3Field(string label, Vector3 value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector3Field(label, value, options);
        }
        protected Vector3Int Vector3IntField(GUIContent label, Vector3Int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector3IntField(label, value, options);
        }
        protected Vector3Int Vector3IntField(string label, Vector3Int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector3IntField(label, value, options);
        }
        protected Vector4 Vector4Field(string label, Vector4 value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector4Field(label, value, options);
        }
        protected Vector4 Vector4Field(GUIContent label, Vector4 value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Vector4Field(label, value, options);
        }
        protected void ObjectField(SerializedProperty property, Type objType, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.ObjectField(property, objType, label, options);
        }
        protected void ObjectField(SerializedProperty property, Type objType, params GUILayoutOption[] options)
        {
            EditorGUILayout.ObjectField(property, objType, options);
        }
        protected void ObjectField(SerializedProperty property, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.ObjectField(property, label, options);
        }
        protected void ObjectField(SerializedProperty property, params GUILayoutOption[] options)
        {
            EditorGUILayout.ObjectField(property, options);
        }
        protected UnityEngine.Object ObjectField(GUIContent label, UnityEngine.Object obj, Type objType, bool allowSceneObjects, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ObjectField(label, obj, objType, allowSceneObjects, options);
        }
        protected UnityEngine.Object ObjectField(UnityEngine.Object obj, Type objType, bool allowSceneObjects, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ObjectField(obj, objType, allowSceneObjects, options);
        }
        protected UnityEngine.Object ObjectField(string label, UnityEngine.Object obj, Type objType, bool allowSceneObjects, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ObjectField(label, obj, objType, allowSceneObjects, options);
        }


        protected bool Toggle(GUIContent label, bool value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Toggle(label, value, options);
        }
        protected bool Toggle(string label, bool value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Toggle(label, value, options);
        }
        protected bool Toggle(GUIContent label, bool value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Toggle(label, value, style, options);
        }
        protected bool Toggle(string label, bool value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Toggle(label, value, style, options);
        }
        protected bool Toggle(bool value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Toggle(value, options);
        }
        protected bool Toggle(bool value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Toggle(value, style, options);
        }
        protected bool ToggleLeft(GUIContent label, bool value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ToggleLeft(label, value, options);
        }
        protected bool ToggleLeft(string label, bool value, GUIStyle labelStyle, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ToggleLeft(label, value, labelStyle, options);
        }
        protected bool ToggleLeft(string label, bool value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ToggleLeft(label, value, options);
        }
        protected bool ToggleLeft(GUIContent label, bool value, GUIStyle labelStyle, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ToggleLeft(label, value, labelStyle, options);
        }

        protected void Slider(SerializedProperty property, float leftValue, float rightValue, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.Slider(property, leftValue, rightValue, label, options);
        }
        protected void Slider(SerializedProperty property, float leftValue, float rightValue, string label, params GUILayoutOption[] options)
        {
            EditorGUILayout.Slider(property, leftValue, rightValue, label, options);
        }
        protected void Slider(SerializedProperty property, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            EditorGUILayout.Slider(property, leftValue, rightValue, options);
        }
        protected float Slider(GUIContent label, float value, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Slider(label, value, leftValue, rightValue, options);
        }
        protected float Slider(string label, float value, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Slider(label, value, leftValue, rightValue, options);
        }
        protected float Slider(float value, float leftValue, float rightValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Slider(value, leftValue, rightValue, options);
        }
        protected int IntSlider(int value, int leftValue, int rightValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntSlider(value, leftValue, rightValue, options);
        }
        protected int IntSlider(string label, int value, int leftValue, int rightValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntSlider(label, value, leftValue, rightValue, options);
        }
        protected int IntSlider(GUIContent label, int value, int leftValue, int rightValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntSlider(label, value, leftValue, rightValue, options);
        }
        protected void IntSlider(SerializedProperty property, int leftValue, int rightValue, params GUILayoutOption[] options)
        {
            EditorGUILayout.IntSlider(property, leftValue, rightValue, options);
        }
        protected void IntSlider(SerializedProperty property, int leftValue, int rightValue, string label, params GUILayoutOption[] options)
        {
            EditorGUILayout.IntSlider(property, leftValue, rightValue, options);
        }
        protected void IntSlider(SerializedProperty property, int leftValue, int rightValue, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.IntSlider(property, leftValue, rightValue, label, options);
        }


        protected void PrefixLabel(string label, [DefaultValue("\"Button\"")] GUIStyle followingStyle)
        {
            EditorGUILayout.PrefixLabel(label, followingStyle);
        }
        protected void PrefixLabel(string label)
        {
            EditorGUILayout.PrefixLabel(label);
        }
        protected void PrefixLabel(GUIContent label, [DefaultValue("\"Button\"")] GUIStyle followingStyle)
        {
            EditorGUILayout.PrefixLabel(label, followingStyle);
        }
        protected void PrefixLabel(GUIContent label)
        {
            EditorGUILayout.PrefixLabel(label);
        }
        protected void PrefixLabel(string label, GUIStyle followingStyle, GUIStyle labelStyle)
        {
            EditorGUILayout.PrefixLabel(label, followingStyle, followingStyle);
        }
        protected void PrefixLabel(GUIContent label, GUIStyle followingStyle, GUIStyle labelStyle)
        {
            EditorGUILayout.PrefixLabel(label, followingStyle, followingStyle);
        }
        protected void LabelField(string label, string label2, GUIStyle style, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, label2, style, options);
        }
        protected void LabelField(GUIContent label, GUIContent label2, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, label2, options);
        }
        protected void LabelField(GUIContent label, GUIContent label2, GUIStyle style, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, label2, style, options);
        }
        protected void LabelField(GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, options);
        }
        protected void LabelField(string label, string label2, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, label2, options);
        }
        protected void LabelField(string label, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, options);
        }
        protected void LabelField(GUIContent label, GUIStyle style, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, style, options);
        }
        protected void LabelField(string label, GUIStyle style, params GUILayoutOption[] options)
        {
            EditorGUILayout.LabelField(label, style, options);
        }

        protected string TagField(string tag, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TagField(tag, options);
        }
        protected string TagField(GUIContent label, string tag, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TagField(label, tag, options);
        }
        protected string TagField(string label, string tag, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TagField(label, tag, options);
        }
        protected string TagField(string label, string tag, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TagField(label, tag, style, options);
        }
        protected string TagField(GUIContent label, string tag, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TagField(label, tag, style, options);
        }
        protected string TagField(string tag, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TagField(tag, style, options);
        }

        protected string ETextArea(string text, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextArea(text, options);
        }
        protected string ETextArea(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextArea(text, style, options);
        }
        protected string ETextField(GUIContent label, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextField(label, text, style, options);
        }
        protected string ETextField(string label, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextField(label, text, style, options);
        }
        protected string ETextField(string label, string text, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextField(label, text, options);
        }
        protected string ETextField(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextField(text, style, options);
        }
        protected string ETextField(string text, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextField(text, options);
        }
        protected string ETextField(GUIContent label, string text, params GUILayoutOption[] options)
        {
            return EditorGUILayout.TextField(label, text, options);
        }
        protected string PasswordField(string label, string password, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PasswordField(label, password, options);
        }
        protected string PasswordField(string password, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PasswordField(password, options);
        }
        protected string PasswordField(string label, string password, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PasswordField(label, password, style, options);
        }
        protected string PasswordField(GUIContent label, string password, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PasswordField(label, password, options);
        }
        protected string PasswordField(GUIContent label, string password, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PasswordField(label, password, style, options);
        }
        protected string PasswordField(string password, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PasswordField(password, style, options);
        }
        protected bool PropertyField(SerializedProperty property, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PropertyField(property, options);
        }
        protected bool PropertyField(SerializedProperty property, bool includeChildren, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PropertyField(property, includeChildren, options);
        }
        protected bool PropertyField(SerializedProperty property, GUIContent label, bool includeChildren, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PropertyField(property, label, includeChildren, options);
        }
        protected bool PropertyField(SerializedProperty property, GUIContent label, params GUILayoutOption[] options)
        {
            return EditorGUILayout.PropertyField(property, label, options);
        }
        protected Rect RectField(GUIContent label, Rect value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.RectField(label, value, options);
        }
        protected Rect RectField(string label, Rect value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.RectField(label, value, options);
        }
        protected Rect RectField(Rect value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.RectField(value, options);
        }
        protected RectInt RectIntField(GUIContent label, RectInt value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.RectIntField(label, value, options);
        }
        protected RectInt RectIntField(RectInt value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.RectIntField(value, options);
        }
        protected RectInt RectIntField(string label, RectInt value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.RectIntField(label, value, options);
        }
        protected void SelectableLabel(string text, params GUILayoutOption[] options)
        {
            EditorGUILayout.SelectableLabel(text, options);
        }
        protected void SelectableLabel(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            EditorGUILayout.SelectableLabel(text, style, options);
        }
        protected void MinMaxSlider(string label, ref float minValue, ref float maxValue, float minLimit, float maxLimit, params GUILayoutOption[] options)
        {
            EditorGUILayout.MinMaxSlider(label, ref minValue, ref maxValue, minLimit, maxLimit, options);
        }
        protected void MinMaxSlider(ref float minValue, ref float maxValue, float minLimit, float maxLimit, params GUILayoutOption[] options)
        {
            EditorGUILayout.MinMaxSlider(ref minValue, ref maxValue, minLimit, maxLimit, options);
        }
        protected void MinMaxSlider(GUIContent label, ref float minValue, ref float maxValue, float minLimit, float maxLimit, params GUILayoutOption[] options)
        {
            EditorGUILayout.MinMaxSlider(label, ref minValue, ref maxValue, minLimit, maxLimit, options);
        }
        protected int LayerField(GUIContent label, int layer, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LayerField(label, layer, style, options);
        }
        protected int LayerField(GUIContent label, int layer, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LayerField(label, layer, options);
        }
        protected int LayerField(string label, int layer, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LayerField(label, layer, style, options);
        }
        protected int LayerField(string label, int layer, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LayerField(label, layer, options);
        }
        protected int LayerField(int layer, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LayerField(layer, style, options);
        }
        protected int LayerField(int layer, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LayerField(layer, options);
        }
        protected int MaskField(int mask, string[] displayedOptions, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.MaskField(mask, displayedOptions, style, options);
        }
        protected int MaskField(string label, int mask, string[] displayedOptions, params GUILayoutOption[] options)
        {
            return EditorGUILayout.MaskField(label, mask, displayedOptions, options);
        }
        protected int MaskField(int mask, string[] displayedOptions, params GUILayoutOption[] options)
        {
            return EditorGUILayout.MaskField(mask, displayedOptions, options);
        }
        protected int MaskField(string label, int mask, string[] displayedOptions, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.MaskField(label, mask, displayedOptions, style, options);
        }
        protected int MaskField(GUIContent label, int mask, string[] displayedOptions, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.MaskField(label, mask, displayedOptions, style, options);
        }
        protected int MaskField(GUIContent label, int mask, string[] displayedOptions, params GUILayoutOption[] options)
        {
            return EditorGUILayout.MaskField(label, mask, displayedOptions, options);
        }

        protected int IntField(GUIContent label, int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntField(label, value, options);
        }
        protected int IntField(GUIContent label, int value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntField(label, value, style, options);
        }
        protected int IntField(string label, int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntField(label, value, options);
        }
        protected int IntField(int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntField(value, options);
        }
        protected int IntField(int value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntField(value, style, options);
        }
        protected int IntField(string label, int value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntField(label, value, style, options);
        }
        protected long LongField(long value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LongField(value, style, options);
        }
        protected long LongField(string label, long value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LongField(label, value, options);
        }
        protected long LongField(GUIContent label, long value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LongField(label, value, options);
        }
        protected long LongField(string label, long value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LongField(label, value, style, options);
        }
        protected long LongField(GUIContent label, long value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LongField(label, value, style, options);
        }
        protected long LongField(long value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.LongField(value, options);
        }
        protected float FloatField(float value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.FloatField(value, options);
        }
        protected float FloatField(float value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.FloatField(value, style, options);
        }
        protected float FloatField(string label, float value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.FloatField(label, value, style, options);
        }
        protected double DoubleField(string label, double value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DoubleField(label, value, style, options);
        }
        protected double DoubleField(GUIContent label, double value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DoubleField(label, value, style, options);
        }
        protected double DoubleField(double value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DoubleField(value, options);
        }
        protected double DoubleField(double value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DoubleField(value, style, options);
        }
        protected double DoubleField(string label, double value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DoubleField(label, value, options);
        }
        protected double DoubleField(GUIContent label, double value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DoubleField(label, value, options);
        }

        protected Bounds BoundsField(GUIContent label, Bounds value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.BoundsField(label, value, options);
        }
        protected Bounds BoundsField(string label, Bounds value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.BoundsField(label, value, options);
        }
        protected Bounds BoundsField(Bounds value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.BoundsField(value, options);
        }
        protected BoundsInt BoundsIntField(string label, BoundsInt value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.BoundsIntField(label, value, options);
        }
        protected BoundsInt BoundsIntField(GUIContent label, BoundsInt value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.BoundsIntField(label, value, options);
        }
        protected BoundsInt BoundsIntField(BoundsInt value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.BoundsIntField(value, options);
        }
        protected Color ColorField(Color value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ColorField(value, options);
        }
        protected Color ColorField(string label, Color value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ColorField(label, value, options);
        }
        protected Color ColorField(GUIContent label, Color value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.ColorField(label, value, options);
        }
        //protected Color ColorField(GUIContent label, Color value, bool showEyedropper, bool showAlpha, bool hdr, ColorPickerHDRConfig hdrConfig, params GUILayoutOption[] options)
        //{
        //    return EditorGUILayout.ColorField(label, value, showEyedropper, showAlpha, hdr, hdrConfig, options);
        //}
        protected AnimationCurve CurveField(AnimationCurve value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.CurveField(value, options);
        }
        protected AnimationCurve CurveField(string label, AnimationCurve value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.CurveField(label, value, options);
        }
        protected AnimationCurve CurveField(GUIContent label, AnimationCurve value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.CurveField(label, value, options);
        }
        protected AnimationCurve CurveField(AnimationCurve value, Color color, Rect ranges, params GUILayoutOption[] options)
        {
            return EditorGUILayout.CurveField(value, color, ranges, options);
        }
        protected AnimationCurve CurveField(string label, AnimationCurve value, Color color, Rect ranges, params GUILayoutOption[] options)
        {
            return EditorGUILayout.CurveField(label, value, color, ranges, options);
        }
        protected AnimationCurve CurveField(GUIContent label, AnimationCurve value, Color color, Rect ranges, params GUILayoutOption[] options)
        {
            return EditorGUILayout.CurveField(label, value, color, ranges, options);
        }
        protected void CurveField(SerializedProperty property, Color color, Rect ranges, params GUILayoutOption[] options)
        {
            EditorGUILayout.CurveField(property, color, ranges, options);
        }
        protected void CurveField(SerializedProperty property, Color color, Rect ranges, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.CurveField(property, color, ranges, label, options);
        }

        protected int DelayedIntField(GUIContent label, int value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedIntField(label, value, style, options);
        }
        protected int DelayedIntField(string label, int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedIntField(label, value, options);
        }
        protected int DelayedIntField(string label, int value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedIntField(label, value, style, options);
        }
        protected int DelayedIntField(GUIContent label, int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedIntField(label, value, options);
        }
        protected void DelayedIntField(SerializedProperty property, params GUILayoutOption[] options)
        {
            EditorGUILayout.DelayedIntField(property, options);
        }
        protected void DelayedIntField(SerializedProperty property, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.DelayedIntField(property, label, options);
        }
        protected int DelayedIntField(int value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedIntField(value, options);
        }
        protected int DelayedIntField(int value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedIntField(value, style, options);
        }
        protected string DelayedTextField(string label, string text, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedTextField(label, text, options);
        }
        protected void DelayedFloatField(SerializedProperty property, params GUILayoutOption[] options)
        {
            EditorGUILayout.DelayedFloatField(property, options);
        }
        protected float DelayedFloatField(float value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedFloatField(value, options);
        }
        protected float DelayedFloatField(float value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedFloatField(value, style, options);
        }
        protected float DelayedFloatField(string label, float value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedFloatField(label, value, options);
        }
        protected float DelayedFloatField(string label, float value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedFloatField(label, value, style, options);
        }
        protected void DelayedFloatField(SerializedProperty property, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.DelayedFloatField(property, label, options);
        }
        protected float DelayedFloatField(GUIContent label, float value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedFloatField(label, value, style, options);
        }
        protected float DelayedFloatField(GUIContent label, float value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedFloatField(label, value, options);
        }
        protected double DelayedDoubleField(double value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedDoubleField(value, options);
        }
        protected double DelayedDoubleField(double value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedDoubleField(value, style, options);
        }
        protected double DelayedDoubleField(string label, double value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedDoubleField(label, value, options);
        }
        protected double DelayedDoubleField(GUIContent label, double value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedDoubleField(label, value, options);
        }
        protected double DelayedDoubleField(string label, double value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedDoubleField(label, value, style, options);
        }
        protected double DelayedDoubleField(GUIContent label, double value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedDoubleField(label, value, style, options);
        }

        protected string DelayedTextField(string text, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedTextField(text, options);
        }
        protected string DelayedTextField(string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedTextField(text, style, options);
        }
        protected string DelayedTextField(string label, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedTextField(label, text, style, options);
        }
        protected string DelayedTextField(GUIContent label, string text, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedTextField(label, text, options);
        }
        protected void DelayedTextField(SerializedProperty property, params GUILayoutOption[] options)
        {
            EditorGUILayout.DelayedTextField(property, options);
        }
        protected void DelayedTextField(SerializedProperty property, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.DelayedTextField(property, label, options);
        }
        protected string DelayedTextField(GUIContent label, string text, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DelayedTextField(label, text, style, options);
        }
        protected float FloatField(string label, float value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.FloatField(label, value, options);
        }
        protected float FloatField(GUIContent label, float value, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.FloatField(label, value, style, options);
        }
        protected float FloatField(GUIContent label, float value, params GUILayoutOption[] options)
        {
            return EditorGUILayout.FloatField(label, value, options);
        }


        protected bool DropdownButton(GUIContent content, FocusType focusType, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DropdownButton(content, focusType, style, options);
        }
        protected bool DropdownButton(GUIContent content, FocusType focusType, params GUILayoutOption[] options)
        {
            return EditorGUILayout.DropdownButton(content, focusType, options);
        }
#if !UNITY_2018
        protected Enum EnumMaskPopup(string label, Enum selected, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskPopup(label, selected, style, options);
        }
        protected Enum EnumMaskPopup(GUIContent label, Enum selected, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskPopup(label, selected, options);
        }
        protected Enum EnumMaskPopup(string label, Enum selected, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskPopup(label, selected, options);
        }
        protected Enum EnumMaskPopup(GUIContent label, Enum selected, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskPopup(label, selected, style, options);
        }
        protected Enum EnumMaskField(Enum enumValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskField(enumValue, options);
        }
        protected Enum EnumMaskField(string label, Enum enumValue, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskField(label, enumValue, style, options);
        }
        protected Enum EnumMaskField(GUIContent label, Enum enumValue, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskField(label, enumValue, style, options);
        }
        protected Enum EnumMaskField(Enum enumValue, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskField(enumValue, style, options);
        }
        protected Enum EnumMaskField(string label, Enum enumValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskField(label, enumValue, options);
        }
        protected Enum EnumMaskField(GUIContent label, Enum enumValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumMaskField(label, enumValue, options);
        }
#endif
        protected float Knob(Vector2 knobSize, float value, float minValue, float maxValue, string unit, Color backgroundColor, Color activeColor, bool showValue, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Knob(knobSize, value, minValue, maxValue, unit, backgroundColor, activeColor, showValue, options);
        }
        protected bool InspectorTitlebar(bool foldout, UnityEngine.Object targetObj)
        {
            return EditorGUILayout.InspectorTitlebar(foldout, targetObj);
        }
        protected void InspectorTitlebar(UnityEngine.Object[] targetObjs)
        {
            EditorGUILayout.InspectorTitlebar(targetObjs);
        }
        protected bool InspectorTitlebar(bool foldout, UnityEngine.Object[] targetObjs, bool expandable)
        {
            return EditorGUILayout.InspectorTitlebar(foldout, targetObjs, expandable);
        }
        protected bool InspectorTitlebar(bool foldout, UnityEngine.Object[] targetObjs)
        {
            return EditorGUILayout.InspectorTitlebar(foldout, targetObjs);
        }
        protected bool InspectorTitlebar(bool foldout, UnityEngine.Object targetObj, bool expandable)
        {
            return EditorGUILayout.InspectorTitlebar(foldout, targetObj, expandable);
        }

        protected int Popup(int selectedIndex, GUIContent[] displayedOptions, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(selectedIndex, displayedOptions, style, options);
        }
        protected int Popup(string label, int selectedIndex, string[] displayedOptions, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(selectedIndex, displayedOptions, options);
        }
        protected int Popup(string label, int selectedIndex, string[] displayedOptions, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(selectedIndex, displayedOptions, style, options);
        }
        protected int Popup(GUIContent label, int selectedIndex, GUIContent[] displayedOptions, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(selectedIndex, displayedOptions, options);
        }
        protected int Popup(int selectedIndex, string[] displayedOptions, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(selectedIndex, displayedOptions, options);
        }
        protected int Popup(int selectedIndex, GUIContent[] displayedOptions, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(selectedIndex, displayedOptions, options);
        }
        protected int Popup(int selectedIndex, string[] displayedOptions, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(selectedIndex, displayedOptions, style, options);
        }
        protected int Popup(GUIContent label, int selectedIndex, GUIContent[] displayedOptions, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.Popup(label, selectedIndex, displayedOptions, style, options);
        }
        protected int IntPopup(int selectedValue, GUIContent[] displayedOptions, int[] optionValues, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(selectedValue, displayedOptions, optionValues, style, options);
        }
        protected int IntPopup(int selectedValue, GUIContent[] displayedOptions, int[] optionValues, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(selectedValue, displayedOptions, optionValues, options);
        }
        protected int IntPopup(int selectedValue, string[] displayedOptions, int[] optionValues, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(selectedValue, displayedOptions, optionValues, style, options);
        }
        protected int IntPopup(int selectedValue, string[] displayedOptions, int[] optionValues, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(selectedValue, displayedOptions, optionValues, options);
        }
        protected int IntPopup(GUIContent label, int selectedValue, GUIContent[] displayedOptions, int[] optionValues, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(selectedValue, displayedOptions, optionValues, options);
        }
        protected int IntPopup(GUIContent label, int selectedValue, GUIContent[] displayedOptions, int[] optionValues, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(selectedValue, displayedOptions, optionValues, style, options);
        }
        protected void IntPopup(SerializedProperty property, GUIContent[] displayedOptions, int[] optionValues, params GUILayoutOption[] options)
        {
            EditorGUILayout.IntPopup(property, displayedOptions, optionValues, options);
        }
        protected void IntPopup(SerializedProperty property, GUIContent[] displayedOptions, int[] optionValues, GUIContent label, params GUILayoutOption[] options)
        {
            EditorGUILayout.IntPopup(property, displayedOptions, optionValues, label, options);
        }
        protected int IntPopup(string label, int selectedValue, string[] displayedOptions, int[] optionValues, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(label, selectedValue, displayedOptions, optionValues, options);
        }
        protected int IntPopup(string label, int selectedValue, string[] displayedOptions, int[] optionValues, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.IntPopup(label, selectedValue, displayedOptions, optionValues, style, options);
        }

        protected Enum EnumPopup(GUIContent label, Enum selected, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumPopup(label, selected, style, options);
        }
        protected Enum EnumPopup(GUIContent label, Enum selected, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumPopup(label, selected, options);
        }
        protected Enum EnumPopup(string label, Enum selected, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumPopup(label, selected, style, options);
        }
        protected Enum EnumPopup(Enum selected, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumPopup(selected, style, options);
        }
        protected Enum EnumPopup(Enum selected, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumPopup(selected, options);
        }
        protected Enum EnumPopup(string label, Enum selected, params GUILayoutOption[] options)
        {
            return EditorGUILayout.EnumPopup(label, selected, options);
        }

        protected bool Foldout(bool foldout, string content, bool toggleOnLabelClick)
        {
            return EditorGUILayout.Foldout(foldout, content, toggleOnLabelClick);
        }
        protected bool Foldout(bool foldout, string content, bool toggleOnLabelClick, [DefaultValue("EditorStyles.foldout")] GUIStyle style)
        {
            return EditorGUILayout.Foldout(foldout, content, toggleOnLabelClick, style);
        }
        protected bool Foldout(bool foldout, GUIContent content, bool toggleOnLabelClick)
        {
            return EditorGUILayout.Foldout(foldout, content, toggleOnLabelClick);
        }
        protected bool Foldout(bool foldout, GUIContent content, bool toggleOnLabelClick, [DefaultValue("EditorStyles.foldout")] GUIStyle style)
        {
            return EditorGUILayout.Foldout(foldout, content, toggleOnLabelClick, style);
        }
        protected bool Foldout(bool foldout, GUIContent content, [DefaultValue("EditorStyles.foldout")] GUIStyle style)
        {
            return EditorGUILayout.Foldout(foldout, content, style);
        }
        protected bool Foldout(bool foldout, GUIContent content)
        {
            return EditorGUILayout.Foldout(foldout, content);
        }
        protected bool Foldout(bool foldout, string content)
        {
            return EditorGUILayout.Foldout(foldout, content);
        }
        protected bool Foldout(bool foldout, string content, [DefaultValue("EditorStyles.foldout")] GUIStyle style)
        {
            return EditorGUILayout.Foldout(foldout, content, style);
        }

        protected Rect GetControlRect(params GUILayoutOption[] options)
        {
            return EditorGUILayout.GetControlRect(options);
        }
        protected Rect GetControlRect(bool hasLabel, float height, GUIStyle style, params GUILayoutOption[] options)
        {
            return EditorGUILayout.GetControlRect(hasLabel, height, style, options);
        }
        protected Rect GetControlRect(bool hasLabel, float height, params GUILayoutOption[] options)
        {
            return EditorGUILayout.GetControlRect(hasLabel, height, options);
        }
        protected Rect GetControlRect(bool hasLabel, params GUILayoutOption[] options)
        {
            return EditorGUILayout.GetControlRect(hasLabel, options);
        }

        protected void HelpBox(string message, MessageType type, bool wide)
        {
            EditorGUILayout.HelpBox(message, type, wide);
        }
        protected void HelpBox(string message, MessageType type)
        {
            EditorGUILayout.HelpBox(message, type);
        }

        protected bool DrawFadeGroup(Action draw, float value)
        {
            bool rect = EditorGUILayout.BeginFadeGroup(value);
            if (draw != null) draw();
            EditorGUILayout.EndFadeGroup();
            return rect;
        }
        protected Rect EDrawHorizontal(Action draw, params GUILayoutOption[] options)
        {
            Rect rect = EditorGUILayout.BeginHorizontal(options);
            if (draw != null) draw();
            EditorGUILayout.EndHorizontal();
            return rect;
        }
        protected Rect EDrawHorizontal(Action draw, GUIStyle style, params GUILayoutOption[] options)
        {
            Rect rect = EditorGUILayout.BeginHorizontal(style, options);
            if (draw != null) draw();
            EditorGUILayout.EndHorizontal();
            return rect;
        }
        protected Vector2 EDrawScrollView(Action draw, Vector2 scrollPosition, bool alwaysShowHorizontal, bool alwaysShowVertical, GUIStyle horizontalScrollbar, GUIStyle verticalScrollbar, GUIStyle background, params GUILayoutOption[] options)
        {
            Vector2 rect = EditorGUILayout.BeginScrollView(scrollPosition, alwaysShowHorizontal, alwaysShowVertical, horizontalScrollbar, verticalScrollbar, background, options);
            if (draw != null) draw();
            EditorGUILayout.EndScrollView();
            return rect;
        }
        protected Vector2 EDrawScrollView(Action draw, Vector2 scrollPosition, GUIStyle style, params GUILayoutOption[] options)
        {
            Vector2 rect = EditorGUILayout.BeginScrollView(scrollPosition, style, options);
            if (draw != null) draw();
            EditorGUILayout.EndScrollView();
            return rect;
        }
        protected Vector2 EDrawScrollView(Action draw, Vector2 scrollPosition, GUIStyle horizontalScrollbar, GUIStyle verticalScrollbar, params GUILayoutOption[] options)
        {
            Vector2 rect = EditorGUILayout.BeginScrollView(scrollPosition, horizontalScrollbar, verticalScrollbar, options);
            if (draw != null) draw();
            EditorGUILayout.EndScrollView();
            return rect;
        }
        protected Vector2 EDrawScrollView(Action draw, Vector2 scrollPosition, bool alwaysShowHorizontal, bool alwaysShowVertical, params GUILayoutOption[] options)
        {
            Vector2 rect = EditorGUILayout.BeginScrollView(scrollPosition, alwaysShowHorizontal, alwaysShowVertical, options);
            if (draw != null) draw();
            EditorGUILayout.EndScrollView();
            return rect;
        }
        protected Vector2 EDrawScrollView(Action draw, Vector2 scrollPosition, params GUILayoutOption[] options)
        {
            Vector2 rect = EditorGUILayout.BeginScrollView(scrollPosition, options);
            if (draw != null) draw();
            EditorGUILayout.EndScrollView();
            return rect;
        }
        protected bool DrawToggleGroup(Action draw, string label, bool toggle)
        {
            bool rect = EditorGUILayout.BeginToggleGroup(label, toggle);
            if (draw != null) draw();
            EditorGUILayout.EndToggleGroup();
            return rect;
        }
        protected bool DrawToggleGroup(Action draw, GUIContent label, bool toggle)
        {
            bool rect = EditorGUILayout.BeginToggleGroup(label, toggle);
            if (draw != null) draw();
            EditorGUILayout.EndToggleGroup();
            return rect;
        }
        protected Rect EDrawVertical(Action draw, params GUILayoutOption[] options)
        {
            Rect rect = EditorGUILayout.BeginVertical(options);
            if (draw != null) draw();
            EditorGUILayout.EndVertical();
            return rect;
        }
        protected Rect EDrawVertical(Action draw, GUIStyle style, params GUILayoutOption[] options)
        {
            Rect rect = EditorGUILayout.BeginVertical(style, options);
            if (draw != null) draw();
            EditorGUILayout.EndVertical();
            return rect;
        }


    }
}
